package com.itjob.scott.lesson01;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import com.itjob.scott.entity.StudentEntity;

public class JDBCUtil {
	
	
	/**
	 * 先把使用JDBC的6个关键步骤写出来。然后再优化
	 * @throws Exception
	 */
	public static void queryByName() throws Exception{
		
		//Step1 加载数据库驱动
		Class.forName("oracle.jdbc.driver.OracleDriver");
		
		/**
		 * Step2获取数据库连接
		 * 备注： XE表示数据库的名字 后面是用户名和密码  
		 * 备注： XE数据库只能有1个数据库就叫xe 而且不能修改名字)  
		 */
		Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","scott","scott");
		
		//Step3  得到创建SQL语句(的接口)
		Statement statement = connection.createStatement();
		
		/**
		 * Step4 执行SQL语句 CRUD 查询语句用executeQuery(), 非查询语句用executeUpdate()
		 * 备注： 查询语句一定不能带分号
		 */
		//查询语句一定不能带分号
		ResultSet rs = statement.executeQuery("select * from itjob_student_t where name='张三'");
		
		/**
		 * Step5 处理查询结果
		 * 循环结果集  用流的方式来获取 
		 */
		List<StudentEntity> studentList = new ArrayList<StudentEntity>();
		while(rs.next()){
			//首先看你是否有下1条记录  列的下标从0开始
			int id = rs.getInt(1);
			
			//列名
			String name= rs.getString("NAME");
			
			StudentEntity entity = new StudentEntity();
			entity.setId(id);
			entity.setName(name);
			studentList.add(entity);
		}
		
		/**
		 * Step6 关闭资源  
		 * 数据库的超时时间为30分钟  取到东西要要释放  先开后关  后开的先关
		 */
		rs.close();
		statement.close();
		connection.close();
		System.out.println(studentList);
	}
	
	public static void queryAll() {
		
		//xe表示数据库的名字 后面是用户名和密码 XE数据库只能有1个数据库就叫xe 而且不能修改名字
		Connection connection=null;
		Statement statement=null;
		ResultSet rs=null;
		List<StudentEntity> studentList=null;
		try {
			//1 加载数据库驱动
			Class.forName("oracle.jdbc.driver.OracleDriver");
			
			//2获取数据库连接
			connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","scott","scott");
			
			//3得到创建SQL语句(接口)
			statement = connection.createStatement();
			
			
			//4执行SQL语句 CRUD 查询语句用executeQuery(), 非查询语句用executeUpdate()
			rs= statement.executeQuery("select * from itjob_student_t");//查询语句一定不能带分号
			
			//循环结果集  用流的方式来获取 
			studentList = new ArrayList<StudentEntity>();
			
			//5 处理查询结果
			while(rs.next()){
				//首先看你是否有下1条记录  列的下标从0开始
				int id = rs.getInt(1);
				
				//列名
				String name= rs.getString("NAME");
				
				StudentEntity entity = new StudentEntity();
				entity.setId(id);
				entity.setName(name);
				studentList.add(entity);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}finally {
			//6 关闭资源  数据库的超时时间为30分钟  取到东西后要释放资源  先开后关  后开的先关
			try {
				if(rs!=null){
					rs.close();
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}
			try {
				if(statement!=null){
					statement.close();
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}
			try {
				if(connection != null){
					connection.close();
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		
		System.out.println(studentList);
	}
	
	
	public static void insert() throws ClassNotFoundException{
		//1  加载数据库驱动
		Class.forName("oracle.jdbc.driver.OracleDriver");
		
		//xe表示数据库的名字 后面是用户名和密码 XE数据库只能有1个数据库就叫xe 而且不能修改名字
		Connection connection=null;
		Statement statement=null;
		try {
			//2获取数据库连接
			connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","scott","scott");
			
			//3创建SQL语句
			statement = connection.createStatement();
			
			
			//4执行SQL语句 CRUD  查询语句用executeQuery(),非查询语句用executeUpdate()
			statement.executeUpdate("insert into itjob_student_t values((select max(id)+1 from itjob_student_t),'张三')");//查询语句一定不能带分号
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			//6 关闭资源  数据库的超时时间为30分钟  取到东西后要释放资源  先开后关  后开的先关
			try {
				if(statement!=null){
					statement.close();
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}
			try {
				if(connection != null){
					connection.close();
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		
		System.out.println("新增成功....");
	}
	
	public static void update() throws ClassNotFoundException{
		//1  加载数据库驱动
		Class.forName("oracle.jdbc.driver.OracleDriver");
		
		//xe表示数据库的名字 后面是用户名和密码 XE数据库只能有1个数据库就叫xe 而且不能修改名字
		Connection connection=null;
		Statement statement=null;
		try {
			//2获取数据库连接
			connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","scott","scott");
			
			//3创建SQL语句
			statement = connection.createStatement();
			
			
			//4执行SQL语句 CRUD  查询语句用executeQuery(),非查询语句用executeUpdate()
			statement.executeUpdate("update itjob_student_t set name='张三丰' where name='张三'");//一定不能带分号
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			//6 关闭资源  数据库的超时时间为30分钟  取到东西后要释放资源  先开后关  后开的先关
			try {
				if(statement!=null){
					statement.close();
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}
			try {
				if(connection != null){
					connection.close();
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		
		System.out.println("修改成功....");
	}
	
	public static void delete() throws ClassNotFoundException{
		//1  加载数据库驱动
		Class.forName("oracle.jdbc.driver.OracleDriver");
		
		//xe表示数据库的名字 后面是用户名和密码 XE数据库只能有1个数据库就叫xe 而且不能修改名字
		Connection connection=null;
		Statement statement=null;
		try {
			//2获取数据库连接
			connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","scott","scott");
			
			//3创建SQL语句
			statement = connection.createStatement();
			
			
			//4执行SQL语句 CRUD  查询语句用executeQuery(),非查询语句用executeUpdate()
			statement.executeUpdate(" delete from itjob_student_t where name='张三' ");//一定不能带分号
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			//6 关闭资源  数据库的超时时间为30分钟  取到东西后要释放资源  先开后关  后开的先关
			try {
				if(statement!=null){
					statement.close();
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}
			try {
				if(connection != null){
					connection.close();
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		System.out.println("删除成功....");
	}

}
